众所周知,validation在controller层很简单。加一个@Valid,加一个bindingresult就行了。
但是在service里怎么判断,查了半天也没查到例子。
业务场景是,json报文的body部分是整体加密的,所以不可能在controller接收的时候用@Requestbody和@Valid就直接检查了,必须先解密,然后在service层判断。
看了一篇分析validation的文章时,https://www.cnblogs.com/mr-yang-localhost/p/7812038.html,介绍了hibernate的校验模式,于是参考写了一个方法。可以实现valid检查参数的目的。
public static void serviceValid(Object object){
String validMessage = "";
//初始化检查器。
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.failFast( false )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
//检查object
Set<ConstraintViolation<Object>> set = validator.validate(object);
//循环set,获取检查结果
for(ConstraintViolation<Object> voset : set){
validMessage = validMessage + voset.getMessage() +";";
}
if(!StringUtils.isEmpty(validMessage)){
//抛出业务异常
throw new XXXException(validMessage);
}
}